package com.bjsxt;

import java.lang.management.ManagementFactory;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**Map接口特点：
 * Map接口定义了双列集口的存储特征，它并不是Collection接口的子接口，双例集合
 * 的存储特征是以Key与value结构为单位进行存储，体现的是数学的函数y=f(X)*/
/*Map与Collection的区别：
* Collection中的容器，元素是孤立存在的，向集合中存储元素采用一个个元素的方式存储。
* Map中容器，元素是成对存在的（可以理解为函数中每一个y值 都对应有一个x值），每个
* 元素由键与值两部分级成，通过键可以找到所对应的值
* Collection中的容器为单例集合，Map为双例集合。
* Map中的集合 不能包含 重复的 键，但 值可以重复，每个键只可以对应一个值
* Map中常用的容器为HashMap，TreeMap等*/

/*V put(k key,v value)  有返回值value  把key与value添加到Map集合中
   如果添加元素时key不存在，则返回null  如果添加元素时key已经存在(两个key相同)，
   那么原来的value会被替代 ，返回被替换的value
* void putAll(Map m)  没有返回值   从指定Map中将所有映射关系复制到此Map中
   取并集时，key有相同时，value也会被替换
* V remove(Object key)  返回被删除的value  删除key对应的value
* V get(Object key)   返回value   根据指定的key ,获得对应的value
* boolean containsValue(Object value)   判断容器中是否包含指定的value
*boolean containsKey(Object key)   判断容器中是否包含指定的key
* set keySet()           获取Map集合中所有的key,存储到Set集合中
* Set<Map.Entry<k,v>>  entrySet()  返回一个Set基于Map.Entry类型包含Map中所有映射
      Map为外部接口  Entry<k,v> 为Map的内部接口 （k,v）为一对映射
* void clear()   删除Map中所有的映射*/
public class TestMap00 {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        //添加元素
        map.put("a","A");
        String val = map.put("b","B");
        System.out.println(val);
        map.put("c","C");
       String val1 =  map.put("c","CC");
        System.out.println(val1);
        System.out.println("---------");
        //通过get给key,获取value
        String val2 = map.get("c");
        System.out.println(val2);
        System.out.println("-----------");
        //使用keySet方法与get方法一并完成
        Set<String> set = map.keySet();
        for(String key:set){
           /* String val3 = map.get(key);
            System.out.println(key+"---------"+val3);*/
            System.out.println(key+"------"+map.get(key));
        }
        System.out.println("----获取元素方式三------");
        //通过entrySet 方法获取Map.Entry类型获取元素
        //Map中所有映射,  （k,v）为一对映射
        //创建存放Map entry 类型的Set  映射放入Set容器中
        Set<Map.Entry<String,String>> entrySet = map.entrySet();
        for(Map.Entry<String,String> entry:entrySet){
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"----------"+value);
        }
        System.out.println("---------并集------");
        Map<String,String> map1 = new HashMap<>();
        map1.put("d","D");
        map1.put("a","D");
        map1.put("e","CC");
        map1.putAll(map);
        Set<String> set1 = map1.keySet();
        for(String key1:set1){
            System.out.println(key1+"-----------"+map1.get(key1));
        }
        System.out.println("-------删除元素--------");
        String val4 = map1.remove("a");
        System.out.println(val4);
        Set<Map.Entry<String,String>>  entrySet1 = map1.entrySet();
        for(Map.Entry<String,String> entry:entrySet1){
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"----------"+value);
        }
    }
}
